Authentication এবং Authorization দুটি গুরুত্বপূর্ণ সিকিউরিটি প্রক্রিয়া যা যেকোনো ওয়েব অ্যাপ্লিকেশনে সুরক্ষা নিশ্চিত করতে ব্যবহৃত হয়। যদিও এগুলি একে অপরের সাথে সম্পর্কিত, তবে তাদের কাজ ভিন্ন।
Authentication হলো প্রক্রিয়া যার মাধ্যমে একটি সিস্টেম নিশ্চিত করে যে, একজন ব্যবহারকারী সঠিক এবং বৈধ। এটি ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া। এক্ষেত্রে, ব্যবহারকারীর পরিচয় প্রমাণের জন্য সাধারণত ইউজারনেম এবং পাসওয়ার্ড ব্যবহার করা হয়। ASP.Net Core-এ Authentication প্রক্রিয়া বাস্তবায়নের জন্য বিভিন্ন পদ্ধতি রয়েছে, যেমন:
Forms Authentication ব্যবহারকারীকে একটি লগইন পৃষ্ঠায় নিয়ে যায় যেখানে ব্যবহারকারী তাদের ইউজারনেম এবং পাসওয়ার্ড প্রদান করে। লগইন সঠিক হলে, ASP.Net Core একটি সেশন তৈরি করে যা পরবর্তী অনুরোধে ব্যবহারকারীর পরিচয় যাচাই করে।
JWT Authentication ব্যবহারকারীর পরিচয় প্রমাণ করতে একটি JSON Web Token ব্যবহার করে। এটি সাধারণত API অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয় যেখানে সেশন ব্যবস্থাপনা খুবই গুরুত্বপূর্ণ নয় এবং RESTful API-তে টোকেনের মাধ্যমে ব্যবহারকারীকে বৈধ করা হয়। JWT একটি নিরাপদ এবং হালকা পদ্ধতি।
Windows Authentication ব্যবহারকারীর উইন্ডোজ অ্যাকাউন্টের উপর ভিত্তি করে ব্যবহারকারীকে স্বীকৃতি দেয়। এটি সাধারণত ইনট্রানেট অ্যাপ্লিকেশনে ব্যবহৃত হয়।
ASP.Net Core বিভিন্ন তৃতীয় পক্ষের সেবা যেমন Google, Facebook, GitHub, এবং Microsoft Identity প্ল্যাটফর্মের মাধ্যমে External Authentication সমর্থন করে। এই প্রক্রিয়ায়, ব্যবহারকারী তাদের তৃতীয় পক্ষের অ্যাকাউন্টের মাধ্যমে লগইন করতে পারেন।
Authorization হলো প্রক্রিয়া যার মাধ্যমে একটি সিস্টেম যাচাই করে, ব্যবহারকারী বা ব্যবহারকারীর গ্রুপের কাছে নির্দিষ্ট রিসোর্স অ্যাক্সেস করার অনুমতি রয়েছে কিনা। Authentication প্রক্রিয়ার পরে Authorization ঘটে। এটি সাধারণত "কার জন্য কি কিছু অনুমতি দেওয়া হবে?"—এই প্রশ্নের উত্তর দেয়।
ASP.Net Core-এ Authorization এর জন্য মূলত দুটি পদ্ধতি রয়েছে:
Role-based Authorization ব্যবহারকারীকে বিভিন্ন "রোল"-এ ভাগ করে এবং সেই রোল অনুযায়ী অ্যাক্সেস নিয়ন্ত্রণ করে। উদাহরণস্বরূপ, একজন অ্যাডমিন ব্যবহারকারী সম্পূর্ণ অ্যাক্সেস পেতে পারে, কিন্তু সাধারণ ব্যবহারকারী শুধুমাত্র নির্দিষ্ট রিসোর্স অ্যাক্সেস করতে পারে।
[Authorize(Roles = "Admin")]
public IActionResult AdminDashboard()
{
return View();
}
এখানে, শুধুমাত্র "Admin" রোলের ব্যবহারকারীরা এই অ্যাকশনে অ্যাক্সেস পাবে।
Policy-based Authorization ব্যবহারকারীদের নির্দিষ্ট শর্তের উপর ভিত্তি করে অনুমতি প্রদান করে। একটি পলিসি সাধারণত একাধিক কন্ডিশন নিয়ে তৈরি হয়। উদাহরণস্বরূপ, আপনি একটি পলিসি তৈরি করতে পারেন যা যাচাই করে যে ব্যবহারকারীর বয়স ১৮ বছরের বেশি কি না, অথবা ব্যবহারকারী একটি নির্দিষ্ট ইমেইল ডোমেইনে কাজ করে কিনা।
[Authorize(Policy = "Over18")]
public IActionResult RestrictedPage()
{
return View();
}
এখানে, পলিসি Over18
ব্যবহারকারীকে যাচাই করে এবং অনুমতি দেয় যদি তার বয়স ১৮ বছর বা তার বেশি হয়।
Claims-based Authorization হচ্ছে একটি আধুনিক পদ্ধতি, যেখানে ব্যবহারকারীর পরিচয়ে থাকা একাধিক দাবির (Claims) ভিত্তিতে নির্দিষ্ট অ্যাক্সেস অনুমতি দেওয়া হয়। Claims হলো ব্যবহারকারীর সম্পর্কিত তথ্য যেমন নাম, ইমেইল, জন্মতারিখ, রোল ইত্যাদি।
[Authorize(Claims = "Permission", Value = "CanEdit")]
public IActionResult Edit()
{
return View();
}
এখানে, ব্যবহারকারীর Claims এর মধ্যে "Permission" নামক Claim এর মান যদি "CanEdit" থাকে, তবে শুধুমাত্র তাকে এডিট করার অনুমতি দেওয়া হবে।
ASP.Net Core Identity হলো একটি শক্তিশালী ফ্রেমওয়ার্ক যা Authentication এবং Authorization ব্যবস্থাপনা করতে সাহায্য করে। এটি ব্যবহারকারীদের রেজিস্ট্রেশন, লগইন, পাসওয়ার্ড রিসেট, রোল ম্যানেজমেন্ট এবং আরও অনেক কিছু পরিচালনা করতে সক্ষম। ASP.Net Core Identity ব্যবহারের জন্য সাধারণত ডাটাবেসে ব্যবহারকারী সম্পর্কিত তথ্য সংরক্ষণ করা হয়।
ASP.Net Core Identity কনফিগার করার জন্য Startup.cs
ফাইলে নিচের মত কোড ব্যবহার করা হয়:
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
}
এটি ASP.Net Core Identity কনফিগার করে এবং ডাটাবেসে ব্যবহারকারী সম্পর্কিত তথ্য সংরক্ষণের জন্য Entity Framework ব্যবহার করে।
ASP.Net Core Identity ব্যবহার করে, আপনি সহজে ব্যবহারকারী রেজিস্ট্রেশন এবং লগইন পদ্ধতি তৈরি করতে পারেন:
public class AccountController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly SignInManager<ApplicationUser> _signInManager;
public AccountController(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
public async Task<IActionResult> Register(RegisterViewModel model)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
return View();
}
}
এখানে, একটি নতুন ব্যবহারকারী তৈরি এবং লগইন করার জন্য ASP.Net Core Identity ব্যবহৃত হয়েছে।
Authentication এবং Authorization দুইটি আলাদা কিন্তু সম্পর্কিত প্রক্রিয়া যা নিরাপত্তার জন্য অত্যন্ত গুরুত্বপূর্ণ। Authentication ব্যবহারকারীর পরিচয় যাচাই করে এবং Authorization তার অনুমতি নির্ধারণ করে। ASP.Net Core-এ বিভিন্ন Authentication পদ্ধতি যেমন Forms Authentication, JWT, এবং External Providers, এবং Authorization পদ্ধতি যেমন Role-based, Policy-based, এবং Claims-based ব্যবহৃত হয়। ASP.Net Core Identity এই দুটি প্রক্রিয়া সহজ এবং নিরাপদভাবে বাস্তবায়ন করতে সাহায্য করে, যা ডেভেলপারদের দ্রুত সিকিউর ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে।
ASP.NET Core Identity একটি শক্তিশালী ফ্রেমওয়ার্ক যা Authentication এবং Authorization সিস্টেম সহজভাবে পরিচালনা করতে সাহায্য করে। এটি user registration, login, role management, এবং password recovery সহ অনেক গুরুত্বপূর্ণ সিকিউরিটি ফিচার প্রোভাইড করে। ASP.NET Core Identity ব্যবহার করে ডেভেলপাররা তাদের ওয়েব অ্যাপ্লিকেশনগুলোর জন্য নিরাপদ এবং স্কেলেবল ইউজার অথেন্টিকেশন ও অথোরাইজেশন সিস্টেম তৈরি করতে পারেন।
ASP.NET Core Identity ফ্রেমওয়ার্ক ডিফল্টভাবে একটি SQL ডেটাবেস ব্যবহার করে ইউজার ডেটা সংরক্ষণ করে, কিন্তু আপনি চাইলে অন্য ডেটাবেস সিস্টেমও ব্যবহার করতে পারবেন। এটি Microsoft.AspNetCore.Identity প্যাকেজের মাধ্যমে ইমপ্লিমেন্ট করা হয় এবং সাধারণত একটি DbContext ক্লাসের মাধ্যমে ডেটাবেসে ব্যবহৃত হয়।
ASP.NET Core Identity ফ্রেমওয়ার্ক ব্যবহার শুরু করার জন্য কিছু নির্দিষ্ট স্টেপ অনুসরণ করতে হয়।
প্রথমে আপনাকে Microsoft.AspNetCore.Identity.EntityFrameworkCore প্যাকেজটি ইনস্টল করতে হবে, যা Identity সিস্টেমের সঙ্গে Entity Framework এর ইন্টিগ্রেশন প্রদান করে। Visual Studio-তে NuGet Package Manager ব্যবহার করে এটি ইনস্টল করা যেতে পারে।
Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
IdentityDbContext ক্লাসটি ডিফল্টভাবে ব্যবহার করা হয়, যা Identity সম্পর্কিত ডেটা সঞ্চয় এবং পরিচালনা করে। এটি আপনার অ্যাপ্লিকেশন এর DbContext থেকে ইনহেরিট হয়।
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
এখানে, ApplicationUser
হলো ইউজার ক্লাস যা আপনি কাস্টমাইজ করতে পারেন।
Startup.cs
ফাইলের মধ্যে Identity কনফিগার করতে হয়। নিচে উদাহরণ দেওয়া হলো:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddControllersWithViews();
}
এখানে AddIdentity
মেথড ব্যবহার করে ApplicationUser
এবং IdentityRole
ক্লাসগুলো কনফিগার করা হয়। এটি ডেটাবেসে ইউজার এবং রোল ম্যানেজমেন্ট সিস্টেম তৈরি করে।
Configure
মেথডে Identity middleware কনফিগার করতে হয়, যা অথেন্টিকেশন এবং অথোরাইজেশন প্রক্রিয়া পরিচালনা করে।
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication(); // Enable Authentication
app.UseAuthorization(); // Enable Authorization
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
UseAuthentication()
এবং UseAuthorization()
মেথডগুলো ব্যবহার করে লগইন এবং অথোরাইজেশন প্রক্রিয়া সম্পাদন করা হয়।
ASP.NET Core Identity ব্যবহার করে কিছু সাধারণ কার্যাবলী:
public class RegisterModel : PageModel
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly SignInManager<ApplicationUser> _signInManager;
public RegisterModel(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
[BindProperty]
public RegisterInputModel Input { get; set; }
public class RegisterInputModel
{
[Required]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
}
public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = Input.UserName };
var result = await _userManager.CreateAsync(user, Input.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return RedirectToPage("/Index");
}
else
{
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
}
return Page();
}
}
এটি একটি ইউজার রেজিস্ট্রেশন পেজের উদাহরণ, যেখানে UserManager
ব্যবহার করে নতুন ইউজার তৈরি করা হয়।
public class LoginModel : PageModel
{
private readonly SignInManager<ApplicationUser> _signInManager;
public LoginModel(SignInManager<ApplicationUser> signInManager)
{
_signInManager = signInManager;
}
[BindProperty]
public LoginInputModel Input { get; set; }
public class LoginInputModel
{
[Required]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}
public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, false, false);
if (result.Succeeded)
{
return RedirectToPage("/Index");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
}
}
return Page();
}
}
এটি একটি লগইন পেজের উদাহরণ, যেখানে SignInManager ব্যবহার করে ইউজারের লগইন যাচাই করা হয়।
ASP.NET Core Identity হলো একটি শক্তিশালী সিকিউরিটি ফ্রেমওয়ার্ক, যা অ্যাপ্লিকেশনগুলিতে ইউজার অথেন্টিকেশন এবং অথোরাইজেশন সহজে এবং নিরাপদভাবে বাস্তবায়ন করতে সহায়তা করে। এটি বিভিন্ন নিরাপত্তা ফিচার যেমন User Registration, Login, Role-based Authorization, Password Recovery, এবং Two-Factor Authentication (2FA) সহ ইউজার ম্যানেজমেন্টের জন্য সম্পূর্ণ সম
াধান প্রদান করে। Identity ফ্রেমওয়ার্ক ব্যবহার করে ডেভেলপাররা তাদের অ্যাপ্লিকেশনগুলির নিরাপত্তা কার্যক্রম শক্তিশালী করতে পারে এবং কাস্টম ইউজার মডেল তৈরি ও কনফিগার করতে পারে।
ASP.NET Core-এ Authorization হল একটি গুরুত্বপূর্ণ নিরাপত্তা প্রক্রিয়া যা ব্যবহারকারীদের নির্দিষ্ট রিসোর্স বা অ্যাপ্লিকেশনে অ্যাক্সেস প্রদান বা অস্বীকার করে। দুটি প্রধান ধরনের Authorization পদ্ধতি রয়েছে: Role-based Authorization এবং Policy-based Authorization। চলুন, এগুলোর বিস্তারিত সম্পর্কে জানি।
Role-based Authorization হল একটি সাধারণ এবং জনপ্রিয় পদ্ধতি যেখানে ব্যবহারকারীদের নির্দিষ্ট রোলের ভিত্তিতে অ্যাপ্লিকেশনে বিভিন্ন রিসোর্স বা অ্যাক্সেস অনুমোদন করা হয়। একে Role-based Access Control (RBAC) বলা হয়।
[Authorize]
অ্যাট্রিবিউট ব্যবহার করে রোল-বেসড অথোরাইজেশন কনফিগার করতে পারেন।ধরা যাক, আমাদের অ্যাপ্লিকেশনে দুটি রোল আছে: "Admin" এবং "User"। এখানে, Admin রোলের ব্যবহারকারী অ্যাডমিন প্যানেলে প্রবেশ করতে পারবে, কিন্তু User রোলের ব্যবহারকারী তা করতে পারবে না।
[Authorize(Roles = "Admin")]
public IActionResult AdminPanel()
{
return View();
}
[Authorize(Roles = "User")]
public IActionResult UserDashboard()
{
return View();
}
এখানে, AdminPanel
শুধুমাত্র Admin রোলের ব্যবহারকারী দেখতে পারবেন, এবং UserDashboard
কেবল User রোলের ব্যবহারকারীর জন্যই অ্যাক্সেসযোগ্য।
ASP.NET Core-এ রোল তৈরি এবং অ্যাসাইন করতে হলে UserManager এবং RoleManager ব্যবহৃত হয়।
public class SeedData
{
public static async Task Initialize(IServiceProvider serviceProvider, UserManager<ApplicationUser> userManager)
{
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
string[] roleNames = { "Admin", "User" };
foreach (var roleName in roleNames)
{
var roleExist = await roleManager.RoleExistsAsync(roleName);
if (!roleExist)
{
var role = new IdentityRole(roleName);
await roleManager.CreateAsync(role);
}
}
var user = await userManager.FindByEmailAsync("admin@admin.com");
if (user == null)
{
user = new ApplicationUser { UserName = "admin@admin.com", Email = "admin@admin.com" };
await userManager.CreateAsync(user, "Test@123");
}
await userManager.AddToRoleAsync(user, "Admin");
}
}
এটি Admin এবং User রোল তৈরি করবে এবং ব্যবহারকারীকে নির্দিষ্ট রোল প্রদান করবে।
Policy-based Authorization হল আরও শক্তিশালী এবং নমনীয় একটি পদ্ধতি যা নির্দিষ্ট শর্ত বা নিয়মের ভিত্তিতে ব্যবহারকারীকে অনুমতি দেয়। এটি Claims বা অন্যান্য কাস্টম প্যারামিটার ব্যবহার করে অধিক নমনীয় অ্যাক্সেস কন্ট্রোল প্রদান করে।
ধরা যাক, আপনি একটি পলিসি তৈরি করতে চান যা ব্যবহারকারীর বয়স ১৮ বছরের বেশি হলে তাকে একটি নির্দিষ্ট রিসোর্স অ্যাক্সেস দেওয়ার অনুমতি দেয়।
ConfigureServices
মেথডে পলিসি কনফিগার করুন।public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("Over18", policy => policy.RequireClaim("Age", "18"));
});
}
এখানে, "Over18"
পলিসি সেই ব্যবহারকারীকে অনুমতি দিবে যার Age claim-এ মান "18" অথবা তার বেশি থাকবে।
[Authorize(Policy = "Over18")]
public IActionResult RestrictedArea()
{
return View();
}
এখানে, RestrictedArea
পেজে শুধুমাত্র সেই ব্যবহারকারী প্রবেশ করতে পারবে, যাদের Age claim-এ ১৮ অথবা তার বেশি মান থাকবে।
আপনি নিজের কাস্টম পলিসিও তৈরি করতে পারেন, যেখানে শর্ত হিসেবে ব্যবহারকারীর বিভিন্ন বৈশিষ্ট্য বা Claims যাচাই করা হয়।
services.AddAuthorization(options =>
{
options.AddPolicy("MustBeAdmin", policy =>
policy.RequireAssertion(context =>
context.User.HasClaim(c => c.Type == "Role" && c.Value == "Admin"));
});
এই কাস্টম পলিসি চেক করবে, ব্যবহারকারীর Role claim-এ "Admin"
মান আছে কিনা।
Role-based Authorization এবং Policy-based Authorization উভয়ই ASP.NET Core-এ শক্তিশালী অথোরাইজেশন পদ্ধতি। Role-based Authorization সোজা এবং ব্যবহার করা সহজ, যেখানে আপনি নির্দিষ্ট রোলের ভিত্তিতে অ্যাক্সেস কন্ট্রোল করেন। অন্যদিকে, Policy-based Authorization বেশি নমনীয় এবং কাস্টম শর্তে ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ করতে সক্ষম। এই দুটি পদ্ধতি একে অপরকে পরিপূরক হিসেবে কাজ করে এবং নিরাপত্তা ব্যবস্থাকে আরও শক্তিশালী করে তোলে।
JWT (JSON Web Token) একটি ওপেন স্ট্যান্ডার্ড যা ক্লাইন্ট এবং সার্ভারের মধ্যে নিরাপদে তথ্য বিনিময় করতে ব্যবহৃত হয়। এটি সাধারণত Authentication এবং Authorization প্রক্রিয়ার জন্য ব্যবহৃত হয়। JWT টোকেন একটি এনক্রিপ্টেড বা সিগনেচার করা স্ট্রিং যা টোকেনের ভিতরে কিছু গুরুত্বপূর্ণ তথ্য ধারণ করে, যেমন ব্যবহারকারীর পরিচয় এবং তাদের অ্যাক্সেসের অনুমতি।
JWT ব্যবহার করার মাধ্যমে, একবার ব্যবহারকারী লগইন করলে, সার্ভার একটি JWT টোকেন জেনারেট করে এবং ব্যবহারকারীকে পাঠিয়ে দেয়, যা পরে পরবর্তী প্রতিটি রিকোয়েস্টের সঙ্গে ক্লাইন্ট দ্বারা সার্ভারে পাঠানো হয়। সার্ভার এই টোকেন যাচাই করে ব্যবহারকারীর পরিচয় নিশ্চিত করে এবং সঠিকভাবে এক্সেস প্রদান করে।
একটি JWT টোকেন তিনটি প্রধান অংশে বিভক্ত থাকে:
উদাহরণ:
{
"alg": "HS256",
"typ": "JWT"
}
উদাহরণ:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
"sub"
হল subject (ব্যবহারকারীর ID), "name"
ব্যবহারকারীর নাম এবং "iat"
হল "issued at" টাইমস্ট্যাম্প।উদাহরণ:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
JWT একটি বেস64 এন্কোডেড স্ট্রিং হিসেবে তিনটি অংশে বিভক্ত হয়ে থাকে, এবং সাধারণত এটি এইরকম দেখায়:
header.payload.signature
উদাহরণ:
Authorization: Bearer <token>
ASP.NET Core অ্যাপ্লিকেশনে JWT Authentication সেটআপ করার জন্য আপনাকে কিছু নির্দিষ্ট স্টেপ অনুসরণ করতে হবে:
Install NuGet Packages:
Microsoft.AspNetCore.Authentication.JwtBearer
প্যাকেজ ইনস্টল করুন।dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Configure JWT Authentication in Startup.cs:
Startup.cs
ফাইলে Authentication মেথড কনফিগার করুন:public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "yourIssuer",
ValidAudience = "yourAudience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"))
};
});
}
Generate JWT Token:
public string GenerateJWT(User user)
{
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.UserId.ToString()),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "yourIssuer",
audience: "yourAudience",
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
JWT (JSON Web Token) হল একটি স্ট্যান্ডার্ড যা নিরাপদ এবং স্টেটলেস অথেন্টিকেশন সিস্টেম তৈরির জন্য ব্যবহৃত হয়। এটি ক্লাইন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান সহজতর করে এবং নিরাপত্তা নিশ্চিত করে। JWT সার্ভারের উপর কোনো স্টেট ধারণ করে না, ফলে এটি বেশি স্কেলেবল এবং ফাস্ট। ASP.NET Core অ্যাপ্লিকেশনে JWT Authentication সেটআপ করতে কিছু নির্দিষ্ট কনফিগারেশন এবং কোড প্রয়োজন, যা সার্ভারের উপর ব্যবহারকারীর অ্যাক্সেস কন্ট্রোল এবং সুরক্ষা নিশ্চিত করে।
OAuth এবং OpenID Connect হলো দুটি জনপ্রিয় অথেন্টিকেশন ও অথরাইজেশন প্রোটোকল যা আধুনিক ওয়েব অ্যাপ্লিকেশন এবং API নিরাপত্তায় গুরুত্বপূর্ণ ভূমিকা পালন করে। ASP.NET Core অ্যাপ্লিকেশনগুলিতে নিরাপত্তা সংক্রান্ত কাজের জন্য এই প্রোটোকলগুলির ইন্টিগ্রেশন খুবই সহজ এবং শক্তিশালী।
OAuth (Open Authorization) একটি অথরাইজেশন ফ্রেমওয়ার্ক যা ইউজারের ক্রেডেনশিয়াল না নিয়ে তৃতীয় পক্ষের অ্যাপ্লিকেশনকে ইউজারের রিসোর্স অ্যাক্সেসের অনুমতি দেয়। এই প্রোটোকল মূলত অ্যাপ্লিকেশনের মধ্যে সুরক্ষিত ডেটা শেয়ার করার জন্য ব্যবহৃত হয়।
উদাহরণস্বরূপ, আপনি যদি একটি অ্যাপ্লিকেশনে গুগল বা ফেসবুক অ্যাকাউন্ট ব্যবহার করে লগ ইন করেন, তবে এটি OAuth প্রোটোকলের মাধ্যমে ঘটে। OAuth ইউজারকে তার ক্রেডেনশিয়াল (যেমন, পাসওয়ার্ড) সরাসরি শেয়ার না করে তৃতীয় পক্ষের অ্যাপ্লিকেশনকে এক্সেস টোকেন প্রদান করে। এই টোকেনটি ব্যবহার করে অ্যাপ্লিকেশন নির্দিষ্ট রিসোর্স (যেমন, ইউজারের প্রোফাইল বা ফটো) অ্যাক্সেস করতে পারে।
OpenID Connect (OIDC) হল OAuth 2.0 এর উপর একটি লেয়ার যা অথেন্টিকেশন প্রদান করে। OAuth শুধুমাত্র অথরাইজেশন দিয়ে থাকে, তবে OpenID Connect ইউজারের পরিচয় যাচাই করার জন্য একটি শীর্ষ স্তরের প্রটোকল সরবরাহ করে। এটি ইউজারের লগইন প্রক্রিয়া সহজ করে তোলে এবং অ্যাপ্লিকেশনকে নিশ্চিত করতে সহায়তা করে যে তারা যে ইউজারের পরিচয় যাচাই করছে, সেই ইউজারের আসলই বা না।
যদি OAuth একটি এক্সেস টোকেন প্রদান করে, তবে OpenID Connect একটি ID Token প্রদান করে যা ইউজারের পরিচয় নিশ্চিত করে।
ASP.NET Core-এ OAuth এবং OpenID Connect ইন্টিগ্রেশন করার জন্য, আপনি ASP.NET Core Identity এবং Authentication Middleware ব্যবহার করতে পারেন। এর মাধ্যমে আপনি গুগল, ফেসবুক, গিটহাব বা অন্য কোনো আইডেন্টিটি প্রোভাইডারের সাথে সিঙ্ক্রোনাইজ করতে পারবেন।
NuGet প্যাকেজ ইনস্টলেশন:
প্রথমে, ASP.NET Core অ্যাপ্লিকেশনে OAuth এবং OpenID Connect ইন্টিগ্রেশন করার জন্য Microsoft.AspNetCore.Authentication.OAuth
এবং Microsoft.AspNetCore.Authentication.OpenIdConnect
প্যাকেজ ইনস্টল করুন।
dotnet add package Microsoft.AspNetCore.Authentication.OAuth
dotnet add package Microsoft.AspNetCore.Authentication.OpenIdConnect
Startup.cs কনফিগারেশন:
Startup.cs
ফাইলে Authentication Middleware কনফিগার করা হবে। এখানে OpenID Connect প্রোভাইডার কনফিগার করা হচ্ছে।
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
})
.AddOpenIdConnect(options =>
{
options.Authority = "https://identityprovider.com"; // Identity provider URL
options.ClientId = "YourClientId";
options.ClientSecret = "YourClientSecret";
options.ResponseType = "code";
options.SaveTokens = true;
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("email");
options.CallbackPath = "/signin-oidc";
});
}
এখানে:
Authentication চ্যালেঞ্জ:
আপনি যখন ইউজারকে অথেন্টিকেট করতে চান, তখন ChallengeAsync মেথড ব্যবহার করতে হবে।
public async Task<IActionResult> Login()
{
await HttpContext.ChallengeAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties
{
RedirectUri = "/"
});
return RedirectToAction("Index", "Home");
}
এই কোডটি ইউজারকে OpenID Connect প্রোভাইডারে রিডাইরেক্ট করবে।
Logout:
Logout প্রক্রিয়াটি এমনভাবে কনফিগার করা হয় যাতে ইউজারকে সিস্টেম থেকে লগ আউট করার পর প্রোভাইডারের সেশনও শেষ হয়ে যায়।
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties
{
RedirectUri = "/"
});
return RedirectToAction("Index", "Home");
}
OAuth এবং OpenID Connect আধুনিক ওয়েব অ্যাপ্লিকেশনগুলির নিরাপত্তা এবং ইউজার অথেন্টিকেশন সহজ এবং নিরাপদ করে তোলে। ASP.NET Core-এ এই দুটি প্রোটোকলকে ইন্টিগ্রেট করা অনেক সহজ এবং এটি একটি স্কেলেবল অথেন্টিকেশন ব্যবস্থা প্রদান করে, যা ব্যবহারকারীদের তাদের সামাজিক অ্যাকাউন্টের মাধ্যমে দ্রুত এবং নিরাপদ লগইন করার সুযোগ দেয়।
common.read_more